sambal 0.0.3 → 0.0.4
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/{spec → lib/sambal}/smb.conf.erb +1 -1
- data/lib/sambal/test_server.rb +77 -0
- data/lib/sambal/version.rb +1 -1
- data/spec/sambal/client_spec.rb +10 -34
- data/spec/spec_helper.rb +18 -37
- metadata +6 -6
@@ -0,0 +1,77 @@
|
|
1
|
+
# coding: UTF-8
|
2
|
+
|
3
|
+
require "erb"
|
4
|
+
require "fileutils"
|
5
|
+
|
6
|
+
class Hash
|
7
|
+
def to_binding(object = Object.new)
|
8
|
+
object.instance_eval("def binding_for(#{keys.join(",")}) binding end")
|
9
|
+
object.binding_for(*values)
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
class Document
|
14
|
+
def initialize(template)
|
15
|
+
@template = ERB.new(template)
|
16
|
+
end
|
17
|
+
|
18
|
+
def interpolate(replacements = {})
|
19
|
+
@template.result(replacements.to_binding)
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
module Sambal
|
24
|
+
class TestServer
|
25
|
+
|
26
|
+
attr_reader :port
|
27
|
+
attr_reader :share_path
|
28
|
+
attr_reader :root_path
|
29
|
+
attr_reader :config_path
|
30
|
+
attr_reader :share_name
|
31
|
+
attr_reader :run_as
|
32
|
+
attr_reader :host
|
33
|
+
|
34
|
+
def initialize(root_path="/tmp/sambal_test_server_#{Time.now.to_i}", share_name='sambal_test', run_as=ENV['USER'])
|
35
|
+
@erb_path = "#{File.expand_path(File.dirname(__FILE__))}/smb.conf.erb"
|
36
|
+
@host = "127.0.0.1" ## will always just be localhost
|
37
|
+
@root_path = root_path
|
38
|
+
@share_path = "#{root_path}/share"
|
39
|
+
@share_name = share_name
|
40
|
+
@config_path = "#{root_path}/smb.conf"
|
41
|
+
@port = Random.new(Time.now.to_i).rand(2345..5678).to_i
|
42
|
+
@run_as = run_as
|
43
|
+
FileUtils.mkdir_p @share_path
|
44
|
+
write_config
|
45
|
+
end
|
46
|
+
|
47
|
+
def find_pids
|
48
|
+
pids = `ps ax | grep smbd | grep #{@port} | grep -v grep | awk '{print \$1}'`.chomp
|
49
|
+
pids.split("\n").map {|p| (p.nil? || p=='') ? nil : p.to_i }
|
50
|
+
end
|
51
|
+
|
52
|
+
def write_config
|
53
|
+
File.open(@config_path, 'w') do |f|
|
54
|
+
f << Document.new(IO.binread(@erb_path)).interpolate(samba_share: @share_path, local_user: @run_as, share_name: @share_name)
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
def start
|
59
|
+
@smb_server_pid = fork do
|
60
|
+
`smbd -S -F -s #{@config_path} -p #{@port}`
|
61
|
+
end
|
62
|
+
sleep 2 ## takes a short time to start up
|
63
|
+
end
|
64
|
+
|
65
|
+
def stop
|
66
|
+
## stopping is done in an ugly way by grepping
|
67
|
+
pids = find_pids
|
68
|
+
pids.each { |ppid| `kill -9 #{ppid} 2> /dev/null` }
|
69
|
+
end
|
70
|
+
|
71
|
+
def stop!
|
72
|
+
stop
|
73
|
+
FileUtils.rm_rf @root_path
|
74
|
+
end
|
75
|
+
|
76
|
+
end
|
77
|
+
end
|
data/lib/sambal/version.rb
CHANGED
data/spec/sambal/client_spec.rb
CHANGED
@@ -5,26 +5,18 @@ require 'tempfile'
|
|
5
5
|
|
6
6
|
describe Sambal::Client do
|
7
7
|
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
def smbd_pids
|
12
|
-
pids = `ps ax | grep smbd | grep #{SMB_PORT} | grep -v grep | awk '{print \$1}'`.chomp
|
13
|
-
pids.split("\n").map {|p| (p.nil? || p=='') ? nil : p.to_i }
|
14
|
-
end
|
15
|
-
|
16
|
-
def start_smbd
|
17
|
-
## we just start an smb server here for the duration of this spec
|
18
|
-
@smb_server_pid = fork do
|
19
|
-
`smbd -S -F -s #{SAMBA_CONF} -p 2321`
|
8
|
+
before(:all) do
|
9
|
+
File.open("#{test_server.share_path}/#{testfile}", 'w') do |f|
|
10
|
+
f << "Hello"
|
20
11
|
end
|
21
|
-
|
12
|
+
FileUtils.mkdir_p "#{test_server.share_path}/#{test_directory}"
|
13
|
+
FileUtils.chmod 0775, "#{test_server.share_path}/#{test_directory}"
|
14
|
+
FileUtils.chmod 0777, "#{test_server.share_path}/#{testfile}"
|
15
|
+
@sambal_client = described_class.new(host: test_server.host, share: test_server.share_name, port: test_server.port)
|
22
16
|
end
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
pids = smbd_pids
|
27
|
-
pids.each { |ppid| `kill -9 #{ppid} 2> /dev/null` }
|
17
|
+
|
18
|
+
after(:all) do
|
19
|
+
@sambal_client.close
|
28
20
|
end
|
29
21
|
|
30
22
|
let(:file_to_upload) do
|
@@ -43,22 +35,6 @@ describe Sambal::Client do
|
|
43
35
|
'testfile.txt'
|
44
36
|
end
|
45
37
|
|
46
|
-
before(:all) do
|
47
|
-
File.open("#{SAMBA_SHARE}/#{testfile}", 'w') do |f|
|
48
|
-
f << "Hello"
|
49
|
-
end
|
50
|
-
FileUtils.mkdir_p "#{SAMBA_SHARE}/#{test_directory}"
|
51
|
-
FileUtils.chmod 0775, "#{SAMBA_SHARE}/#{test_directory}"
|
52
|
-
FileUtils.chmod 0777, "#{SAMBA_SHARE}/#{testfile}"
|
53
|
-
start_smbd
|
54
|
-
@sambal_client = described_class.new(host: '127.0.0.1', share: SHARE_NAME, port: SMB_PORT)
|
55
|
-
end
|
56
|
-
|
57
|
-
after(:all) do
|
58
|
-
@sambal_client.close
|
59
|
-
stop_smbd
|
60
|
-
end
|
61
|
-
|
62
38
|
it "should list files on an smb server" do
|
63
39
|
@sambal_client.ls.should have_key(testfile)
|
64
40
|
end
|
data/spec/spec_helper.rb
CHANGED
@@ -8,41 +8,7 @@ lib_path = File.expand_path('../lib', File.dirname(__FILE__))
|
|
8
8
|
$:.unshift(lib_path) if File.directory?(lib_path) && !$:.include?(lib_path)
|
9
9
|
|
10
10
|
require 'sambal'
|
11
|
-
|
12
|
-
FileUtils.rm_rf "/tmp/sambal_spec/samba"
|
13
|
-
FileUtils.mkdir_p "/tmp/sambal_spec/samba/"
|
14
|
-
|
15
|
-
spec_path = File.expand_path('./', File.dirname(__FILE__))
|
16
|
-
|
17
|
-
SAMBA_SHARE = "#{spec_path}/sambashare"
|
18
|
-
SAMBA_CONF = "#{spec_path}/smb.conf"
|
19
|
-
|
20
|
-
FileUtils.rm_rf SAMBA_SHARE
|
21
|
-
FileUtils.mkdir_p SAMBA_SHARE
|
22
|
-
#
|
23
|
-
require "erb"
|
24
|
-
#
|
25
|
-
class Hash
|
26
|
-
def to_binding(object = Object.new)
|
27
|
-
object.instance_eval("def binding_for(#{keys.join(",")}) binding end")
|
28
|
-
object.binding_for(*values)
|
29
|
-
end
|
30
|
-
end
|
31
|
-
|
32
|
-
class Document
|
33
|
-
def initialize(template)
|
34
|
-
@template = ERB.new(template)
|
35
|
-
end
|
36
|
-
|
37
|
-
def interpolate(replacements = {})
|
38
|
-
@template.result(replacements.to_binding)
|
39
|
-
end
|
40
|
-
end
|
41
|
-
#
|
42
|
-
|
43
|
-
File.open(SAMBA_CONF, 'w') do |f|
|
44
|
-
f << Document.new(IO.binread("#{spec_path}/smb.conf.erb")).interpolate(samba_share: SAMBA_SHARE, local_user: ENV['USER'])
|
45
|
-
end
|
11
|
+
require 'sambal/test_server'
|
46
12
|
|
47
13
|
RSpec::Matchers.define :be_successful do
|
48
14
|
match do |actual|
|
@@ -50,8 +16,11 @@ RSpec::Matchers.define :be_successful do
|
|
50
16
|
end
|
51
17
|
end
|
52
18
|
|
53
|
-
|
54
|
-
|
19
|
+
module TestServer
|
20
|
+
def test_server
|
21
|
+
$test_server
|
22
|
+
end
|
23
|
+
end
|
55
24
|
|
56
25
|
RSpec.configure do |config|
|
57
26
|
# == Mock Framework
|
@@ -68,4 +37,16 @@ RSpec.configure do |config|
|
|
68
37
|
config.color_enabled = true
|
69
38
|
## dont do this, do it in Rakefile instead
|
70
39
|
#config.formatter = 'd'
|
40
|
+
|
41
|
+
config.before(:suite) do
|
42
|
+
$test_server = Sambal::TestServer.new
|
43
|
+
$test_server.start
|
44
|
+
end
|
45
|
+
|
46
|
+
config.after(:suite) do
|
47
|
+
$test_server.stop! ## removes any created directories
|
48
|
+
end
|
49
|
+
|
50
|
+
config.include TestServer
|
51
|
+
|
71
52
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sambal
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.4
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-04-
|
12
|
+
date: 2012-04-23 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rspec
|
16
|
-
requirement: &
|
16
|
+
requirement: &70339101671600 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
@@ -21,7 +21,7 @@ dependencies:
|
|
21
21
|
version: 2.6.0
|
22
22
|
type: :development
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *70339101671600
|
25
25
|
description: Ruby Samba Client using the cmdline smbclient
|
26
26
|
email:
|
27
27
|
- john@insane.se
|
@@ -35,10 +35,11 @@ files:
|
|
35
35
|
- README.md
|
36
36
|
- Rakefile
|
37
37
|
- lib/sambal.rb
|
38
|
+
- lib/sambal/smb.conf.erb
|
39
|
+
- lib/sambal/test_server.rb
|
38
40
|
- lib/sambal/version.rb
|
39
41
|
- sambal.gemspec
|
40
42
|
- spec/sambal/client_spec.rb
|
41
|
-
- spec/smb.conf.erb
|
42
43
|
- spec/spec_helper.rb
|
43
44
|
homepage: https://github.com/johnae/sambal
|
44
45
|
licenses: []
|
@@ -66,5 +67,4 @@ specification_version: 3
|
|
66
67
|
summary: Ruby Samba Client
|
67
68
|
test_files:
|
68
69
|
- spec/sambal/client_spec.rb
|
69
|
-
- spec/smb.conf.erb
|
70
70
|
- spec/spec_helper.rb
|