rslp 0.1.0 → 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 6d18a5f649a8f64234f0ca36681d7700bc82c6f92d6f92fb7de5a15a3e0c9a75
4
- data.tar.gz: 445016807c2bb1f53192df312f86e8da65948e2c5f634f16cb5fd91fcd49df10
3
+ metadata.gz: 1c95a3256bfee540b035527983b2855d2ed8cfee989c766674259cc5649c928f
4
+ data.tar.gz: c78b46ee391b1dc210100c998a1e37ef1ab27e1dca89474aef4f48a2c0670612
5
5
  SHA512:
6
- metadata.gz: c2150dfc89eae6d2a403151bcc6d4e1e683733225702cbd7e51cb2f6fc7d90e1e3b25504b2536d14a03fa629acb1fa4a8a093e6c45d72964feec43eac367fa94
7
- data.tar.gz: 5051e0ec6e22438ada2b92729c64465b307201d0baf60a996627cf429efa2fbdb246ce602eeb627a29db60362bbd65944195d7ef46a7ef89880b052770572cbc
6
+ metadata.gz: cfbdfcea3945c0d0ee3625a0494e012b98ad85704089e254cafa2d9b9e3e85db19d93fb06ded3518e5c3d10073c43c1efcc1537b3ac4679867b3e035d881b0c3
7
+ data.tar.gz: 9e504c569a23cbfd41701beddf4670cf2441eea128ce9686c6ceb10bc7ebf61554a6641367ddebf490b8cd2c979ff45cb2d76b8f7d2961030f7d67c4e5564f5f
checksums.yaml.gz.sig CHANGED
Binary file
data/CHANGES.md CHANGED
@@ -1,3 +1,11 @@
1
+ ## 0.1.1 - 22-Oct-2022
2
+ * Added many more specs, along with instructions for how to install and
3
+ run an openslp container via Docker so that you can run the specs.
4
+ * The :url parameter to the register method now raises an error unless
5
+ it is present. It was always required in practice, but now it's enforced.
6
+ * Many documentation updates, notably that some methods may not actually
7
+ be implemented yet by the underlying OpenSLP library.
8
+
1
9
  ## 0.1.0 - 19-Oct-2022
2
10
  * Updated the constructor, now uses keyword arguments.
3
11
  * Constructor now accepts a hostname, or a comma separate lists of hosts.
data/README.md CHANGED
@@ -24,6 +24,17 @@ None that I'm aware of. Please report bugs on the project page at:
24
24
 
25
25
  https://github.com/djberg96/rslp
26
26
 
27
+ ## Running the Specs
28
+ You will need an OpenSLP server running on localhost to run all of the specs.
29
+ The easiest way to do that is to install docker and run:
30
+
31
+ `docker run -d -p 427:427/tcp -p 427:427/udp vcrhonek/openslp`
32
+
33
+ Once you're done just terminate the container.
34
+
35
+ ## Notes
36
+ Also see Novell's SLP implementation.
37
+
27
38
  ## Future Plans
28
39
  None at this time.
29
40
 
data/lib/rslp.rb CHANGED
@@ -11,7 +11,7 @@ module OpenSLP
11
11
  extend OpenSLP::Functions
12
12
 
13
13
  # The version of the rslp library.
14
- VERSION = '0.1.0'.freeze
14
+ VERSION = '0.1.1'.freeze
15
15
 
16
16
  # Internal error raised whenever an openslp function fails.
17
17
  class Error < StandardError; end
@@ -31,7 +31,7 @@ module OpenSLP
31
31
  #
32
32
  # The +async+ argument may be set to true or false and establishes whether
33
33
  # the underlying handle is set to handle asynchronous operations or not. By
34
- # default this value is false.
34
+ # default this value is false, and may not be supported by your implementation.
35
35
  #
36
36
  # The +host+ argument, if present, will associate the Host/IP with the OpenSLP
37
37
  # handle. This is the Hostname/IP address of the Service Agent / Directory Agent
@@ -104,6 +104,8 @@ module OpenSLP
104
104
  # Returns the url if successful.
105
105
  #
106
106
  def register(options = {})
107
+ url = options.fetch(:url){ raise ArgumentError, ":url must be provided" }
108
+
107
109
  options[:lifetime] ||= SLP_LIFETIME_DEFAULT
108
110
  options[:attributes] ||= ""
109
111
  options[:fresh] ||= true
@@ -121,7 +123,7 @@ module OpenSLP
121
123
 
122
124
  result = SLPReg(
123
125
  @handle,
124
- options[:url],
126
+ url,
125
127
  options[:lifetime],
126
128
  nil,
127
129
  attributes,
@@ -135,7 +137,7 @@ module OpenSLP
135
137
  cookie.free unless cookie.null?
136
138
  end
137
139
 
138
- options[:url]
140
+ url
139
141
  end
140
142
 
141
143
  # Deregisters the advertisement for +url+ in all scopes where the service
@@ -161,6 +163,10 @@ module OpenSLP
161
163
  #
162
164
  # Returns the list of deleted attributes if successful.
163
165
  #
166
+ # Note that this method may not be supported. In that case, the only way
167
+ # to alter a service's attributes is to deregister it then register it
168
+ # again without the undesired attributes.
169
+ #
164
170
  def delete_service_attributes(url, attributes)
165
171
  callback = Proc.new{ |hslp, err, cookie| }
166
172
 
@@ -206,8 +212,8 @@ module OpenSLP
206
212
  # form of an LDAP search filter. The default is an empty string, which
207
213
  # will gather all services of the requested type.
208
214
  #
209
- # The result is an array of hashes, with the URL as the key and its lifetime
210
- # as the value.
215
+ # The result is an array of hashes, with the URL as the key and its
216
+ # remaining lifetime as the value.
211
217
  #
212
218
  def find_services(type, scope = '', filter = '')
213
219
  arr = []
data/rslp.gemspec CHANGED
@@ -3,7 +3,7 @@ require 'rbconfig'
3
3
 
4
4
  Gem::Specification.new do |spec|
5
5
  spec.name = 'rslp'
6
- spec.version = '0.1.0'
6
+ spec.version = '0.1.1'
7
7
  spec.license = 'Apache-2.0'
8
8
  spec.author = 'Daniel J. Berger'
9
9
  spec.email = 'djberg96@gmail.com'
@@ -31,7 +31,7 @@ Gem::Specification.new do |spec|
31
31
  }
32
32
 
33
33
  spec.description = <<-EOF
34
- The rslp library is an FFI interface for the OpenSLP service
35
- location protocol library.
34
+ The rslp library is an FFI interface for the OpenSLP service location
35
+ protocol library. See http://www.openslp.org for more information.
36
36
  EOF
37
37
  end
data/spec/rslp_spec.rb CHANGED
@@ -1,8 +1,14 @@
1
- ########################################################################
1
+ ##############################################################################
2
2
  # rslp_spec.rb
3
3
  #
4
- # Test suite for the rslp library.
5
- ########################################################################
4
+ # Test suite for the rslp library. Note that these specs assume that you
5
+ # have an OpenSLP server running on localhost. If not, install Docker and
6
+ # run the following command:
7
+ #
8
+ # docker run -d -p 427:427/tcp -p 427:427/udp vcrhonek/openslp
9
+ #
10
+ # Once complete, simply stop the docker container and delete the image.
11
+ ##############################################################################
6
12
  require 'rspec'
7
13
  require 'rslp'
8
14
 
@@ -14,7 +20,7 @@ RSpec.describe OpenSLP::SLP do
14
20
 
15
21
  context "version" do
16
22
  example "version is set to the expected value" do
17
- expect(described_class::VERSION).to eq('0.1.0')
23
+ expect(described_class::VERSION).to eq('0.1.1')
18
24
  end
19
25
  end
20
26
 
@@ -109,6 +115,144 @@ RSpec.describe OpenSLP::SLP do
109
115
  expect(described_class.unescape_reserved("\\2Ctag-example\\2C")).to eq(expected)
110
116
  end
111
117
  end
118
+
119
+ context "set_app_property_file" do
120
+ example "defines a set_app_property_file method" do
121
+ expect(described_class).to respond_to(:set_app_property_file)
122
+ end
123
+ end
124
+ end
125
+
126
+ describe "instance methods" do
127
+ let(:service){ "service:ntp" }
128
+ let(:url){ "#{service}://time.windows.com" }
129
+ let(:attributes){ {"foo" => "hello", "bar" => "world"} }
130
+
131
+ context "close" do
132
+ example "has a close method that returns the expected value" do
133
+ expect(@slp).to respond_to(:close)
134
+ expect(@slp.close).to be_nil
135
+ end
136
+
137
+ example "calling close multiple times has no effect" do
138
+ expect(@slp.close).to be_nil
139
+ expect(@slp.close).to be_nil
140
+ end
141
+ end
142
+
143
+ context "find_scopes" do
144
+ example "has a find_scopes method" do
145
+ expect(@slp).to respond_to(:find_scopes)
146
+ end
147
+
148
+ example "the find_scopes method returns the expected value" do
149
+ expect(@slp.find_scopes).to eq(['DEFAULT'])
150
+ end
151
+ end
152
+
153
+ context "find_services" do
154
+ before do
155
+ sleep 1
156
+ @slp.register(url: url, attributes: attributes)
157
+ end
158
+
159
+ example "has a find_services method" do
160
+ expect(@slp).to respond_to(:find_services)
161
+ end
162
+
163
+ example "the find_services method returns the expected types" do
164
+ results = @slp.find_services(service)
165
+ expect(results).to be_kind_of(Array)
166
+ expect(results.first).to be_kind_of(Hash)
167
+ end
168
+
169
+ example "the find_services method returns the expected values" do
170
+ results = @slp.find_services(service)
171
+ expect(results.first.keys).to include(url)
172
+ expect(results.first.values.first).to be_kind_of(Numeric)
173
+ end
174
+
175
+ example "the find_services method with valid scope returns the expected values" do
176
+ results = @slp.find_services(service, 'DEFAULT')
177
+ expect(results.first.keys).to include(url)
178
+ expect(results.first.values.first).to be_kind_of(Numeric)
179
+ end
180
+
181
+ =begin
182
+ # These specs appear to cause a segfault in the OpenSLP daemon.
183
+ example "the find_services method with invalid scope returns an empty value" do
184
+ results = @slp.find_services(service, 'bogus')
185
+ expect(results).to be_empty
186
+ end
187
+
188
+ example "the find_services method with filter on existing attribute returns the expected values" do
189
+ results = @slp.find_services(service, '', "(foo=hello)")
190
+ expect(results).to eq(1)
191
+ end
192
+ =end
193
+ end
194
+
195
+ context "find_service_types" do
196
+ example "has a find_services method" do
197
+ expect(@slp).to respond_to(:find_service_types)
198
+ end
199
+
200
+ example "the find_service_types method returns the expected results" do
201
+ results = @slp.find_service_types
202
+ expect(results).to be_kind_of(Array)
203
+ expect(results.first).to eq(service)
204
+ end
205
+ end
206
+
207
+ context "registration" do
208
+ example "registers a service successfully if url is provided" do
209
+ expect(@slp.register(url: url)).to eq(url)
210
+ end
211
+
212
+ example "doesn't matter if service is already registered" do
213
+ expect(@slp.register(url: url)).to eq(url)
214
+ end
215
+
216
+ example "accepts hash attributes option and registers them as expected" do
217
+ expect(@slp.register(url: url, attributes: attributes)).to eq(url)
218
+ end
219
+
220
+ example "raises an error if the :url option is not provided" do
221
+ expect{ @slp.register }.to raise_error(ArgumentError, ":url must be provided")
222
+ end
223
+
224
+ example "registers a service successfully with a lifetime value" do
225
+ expect(@slp.register(url: url, lifetime: OpenSLP::SLP::SLP_LIFETIME_MAXIMUM)).to eq(url)
226
+ expect(@slp.find_services(service).first.values.first).to be_within(1).of(OpenSLP::SLP::SLP_LIFETIME_MAXIMUM)
227
+ end
228
+ end
229
+
230
+ context "deregistration" do
231
+ example "deregisters a service successfully if it exists" do
232
+ expect(@slp.deregister(url)).to eq(url)
233
+ expect(@slp.find_services(url)).to be_empty
234
+ end
235
+
236
+ example "fails to deregister a service successfully if it does not exist" do
237
+ expect{ @slp.deregister('bogus') }.to raise_error(OpenSLP::SLP::Error)
238
+ end
239
+ end
240
+
241
+ context "find service attributes" do
242
+ before do
243
+ @slp.register(url: url, attributes: attributes)
244
+ end
245
+
246
+ example "successfully finds service attribute when they exist" do
247
+ expect(@slp.find_service_attributes(url)).to eq(["(foo=hello),(bar=world)"])
248
+ expect(@slp.find_service_attributes(url, "foo")).to eq(["(foo=hello)"])
249
+ expect(@slp.find_service_attributes(url, "foo,bar")).to eq(["(foo=hello),(bar=world)"])
250
+ end
251
+
252
+ example "returns an empty array if the service attribute does not exist" do
253
+ expect(@slp.find_service_attributes(url, "bogus")).to eq([])
254
+ end
255
+ end
112
256
  end
113
257
 
114
258
  after do
data.tar.gz.sig CHANGED
Binary file
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rslp
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Daniel J. Berger
@@ -35,7 +35,7 @@ cert_chain:
35
35
  ORVCZpRuCPpmC8qmqxUnARDArzucjaclkxjLWvCVHeFa9UP7K3Nl9oTjJNv+7/jM
36
36
  WZs4eecIcUc4tKdHxcAJ0MO/Dkqq7hGaiHpwKY76wQ1+8xAh
37
37
  -----END CERTIFICATE-----
38
- date: 2022-10-20 00:00:00.000000000 Z
38
+ date: 2022-10-22 00:00:00.000000000 Z
39
39
  dependencies:
40
40
  - !ruby/object:Gem::Dependency
41
41
  name: ffi
@@ -80,8 +80,8 @@ dependencies:
80
80
  - !ruby/object:Gem::Version
81
81
  version: '3.9'
82
82
  description: |2
83
- The rslp library is an FFI interface for the OpenSLP service
84
- location protocol library.
83
+ The rslp library is an FFI interface for the OpenSLP service location
84
+ protocol library. See http://www.openslp.org for more information.
85
85
  email: djberg96@gmail.com
86
86
  executables: []
87
87
  extensions: []
metadata.gz.sig CHANGED
Binary file